/*
 * @lc app=leetcode.cn id=917 lang=typescript
 *
 * [917] 仅仅反转字母
 */

// @lc code=start

// 暴力解法，通过移除所有字符并反转的方式重构
// function reverseOnlyLetters(s: string): string {
//     const isAZ = (s: string) => {
//         return /[a-z|A-Z]/.test(s);
//     };
//     let cache: string[] = [];
//     for (let i = 0; i < s.length; i++) {
//         const element = s[i];
//         if (isAZ(element)) {
//             cache.push(element);
//         }
//     }
//     let result = s.split("");
//     for (let i = 0; i < s.length; i++) {
//         const element = s[i];
//         if (isAZ(element)) {
//             result[i] = cache.pop()!;
//         }
//     }
//     return result.join("");
// }
// 双指针比较强
function reverseOnlyLetters(s: string): string {
    const isAZ = (s: string) => {
        return /[a-z|A-Z]/.test(s);
    };
    let result = [...s];
    let i = 0;
    let j = result.length - 1;
    while (i < j) {
        if (!isAZ(result[i])) {
            i++;
            continue;
        }
        if (!isAZ(result[j])) {
            j--;
            continue;
        }
        [result[i], result[j]] = [result[j], result[i]];
        i++;
        j--;
    }
    return result.join("");
}
// @lc code=end
